package com.pe.pgn.clubpgn.webapp.controller.transferencias;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.domain.ClpbCategoria;
import com.pe.pgn.clubpgn.domain.beans.BNAlmacen;
import com.pe.pgn.clubpgn.domain.beans.BNArticulo;
import com.pe.pgn.clubpgn.domain.beans.BNCatalogo;
import com.pe.pgn.clubpgn.domain.beans.BNDocumentoMovArticulo;
import com.pe.pgn.clubpgn.service.CatalogoService;
import com.pe.pgn.clubpgn.service.CategoriaService;
import com.pe.pgn.clubpgn.service.TransferenciaService;
import com.pe.pgn.clubpgn.webapp.controller.BaseFormController;
import com.pe.pgn.clubpgn.webapp.util.CalendarUtil;

/**
 * @author Frank
 * */

@Controller
@RequestMapping("/transferencias/**")
public class TransferenciasController extends BaseFormController{

	@Autowired
	private TransferenciaService transferenciaService;
	
	@Autowired
	private CatalogoService catalogoService;
	
	@Autowired
	private CategoriaService categoriaService;
	
	@RequestMapping(value = "/transferencialist.html")
    public void listarCanjes(Model model) {

		List<BNDocumentoMovArticulo> listatransf = transferenciaService.obtenerListaTransferencias();
		List<BNAlmacen> listaalmacen = transferenciaService.obtenerTodosAlmacenes();
		List<BNCatalogo> listacatalogo = catalogoService.obtenerTodoCatalogos(false);
		
		model.addAttribute("listatransf"   , listatransf);
		model.addAttribute("listaalmacen"  , listaalmacen);
		model.addAttribute("listacatalogo" , listacatalogo);
		model.addAttribute("date_format"   , CLPConstantes.DATE_PATTERN);		
    }
	
	@RequestMapping(value = "/transferenciaform.html", method = RequestMethod.GET)
	public @ModelAttribute("transferenciaform") BNDocumentoMovArticulo verDocumentoTransferencia(
		   @RequestParam(value = "id", required = false) Long id, Model model) {
	
		BNDocumentoMovArticulo bntransf =
		new BNDocumentoMovArticulo();
		
		if (id != null) { //update
			bntransf = transferenciaService.obtenerDocumentoTransferencia(id);
		}else{ //insert
			bntransf.setDaFechaDocumento(CalendarUtil.calendarToString
			(CLPConstantes.DATE_PATTERN, Calendar.getInstance())); //seteando la fecha Actual
			
			List<BNAlmacen> listaalmacen   = transferenciaService.obtenerTodosAlmacenes();
			List<BNCatalogo> listacatalogo = catalogoService.obtenerTodoCatalogos(true);		
			model.addAttribute("listaalmacen"  , listaalmacen);
			model.addAttribute("listacatalogo" , listacatalogo);
		}
		
		model.addAttribute("transferenciaform" , bntransf);
		return bntransf;	
	}
	
	@RequestMapping(value = "/buscararticulos.html", method = RequestMethod.GET)
	public String  buscarArticulos(Model model,
	@RequestParam(value = "coAlmacenOrigen",   required = false) String coAlmacenOrigen,
	@RequestParam(value = "coAlmacenDestino",  required = false) String coAlmacenDestino,
	@RequestParam(value = "coCatalogoOrigen",  required = false) String coCatalogoOrigen,
	@RequestParam(value = "coCatalogoDestino", required = false) String coCatalogoDestino) {
		
		List<ClpbCategoria> categorias = categoriaService.obtenerTodoCategorias();
		List<BNArticulo> articulos = transferenciaService.obtenerListaArticulosWizard
		(coAlmacenOrigen,coAlmacenDestino,coCatalogoOrigen,coCatalogoDestino);		
		
		if("-1".equals(coCatalogoOrigen)){
			coCatalogoOrigen="";
		}
		
		if("-1".equals(coCatalogoDestino)){
			coCatalogoDestino="";
		}
		
		model.addAttribute("listaarticulos"	   , articulos);
		model.addAttribute("listacategorias"   , categorias);
		model.addAttribute("coalmacenorigen"   , coAlmacenOrigen);
		model.addAttribute("coalmacendestino"  , coAlmacenDestino);
		model.addAttribute("cocatalogoorigen"  , coCatalogoOrigen);
		model.addAttribute("cocatalogodestino" , coCatalogoDestino);
		return "/wizard/buscararticulotransacwizard";
	}
	
	@SuppressWarnings("unchecked")
	@RequestMapping(value = "/transferenciaform.html", method = RequestMethod.POST)
	public String guardarTransferencia(
		@ModelAttribute("transferenciaform") BNDocumentoMovArticulo bntransf,
		BindingResult result, SessionStatus status, HttpServletRequest request, Model model) {

		try {
		
			Map map = transferenciaService.guardarDocumentoTransferencia(bntransf);			
	    	if(map.get("msg").equals("success")){
	    		saveMessage(request, getText("transferenciaform.added", request.getLocale()));
	    		Long id = (Long)map.get("id");
	    		return "redirect:transferenciaform.html?id="+id+"&amp;from=list";
	    	}else{
	    		
	    		String strDetalle = String.valueOf(map.get("detalle"));
	    		if(strDetalle.equalsIgnoreCase("vaCantidad")){
	    			saveError(request, getText("transferenciaform.cantidad.insuficiente",map.get("flag").toString(),request.getLocale()));
	    		}else{
	    			saveError(request, getText("errors.general", request.getLocale()));
	    		}
	    		
	    		bntransf.getDocumentoDetalle().clear();
	    		List<BNAlmacen> listaalmacen   = transferenciaService.obtenerTodosAlmacenes();
				List<BNCatalogo> listacatalogo = catalogoService.obtenerTodoCatalogos(true);
				model.addAttribute("listaalmacen"  , listaalmacen);
				model.addAttribute("listacatalogo" , listacatalogo);
	    	}
	    	
		} catch (SQLException e) {
			
			bntransf.getDocumentoDetalle().clear();
			saveError(request, getText("errors.general", request.getLocale()));		
			List<BNAlmacen> listaalmacen   = transferenciaService.obtenerTodosAlmacenes();
			List<BNCatalogo> listacatalogo = catalogoService.obtenerTodoCatalogos(true);
			model.addAttribute("listaalmacen"  , listaalmacen);
			model.addAttribute("listacatalogo" , listacatalogo);
		}
		
    	model.addAttribute("transferenciaform" , bntransf);
    	return "/transferencias/transferenciaform";
	}
}
